package com.vtb.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.vtb.base.VtbBaseServlet;
import com.vtb.entity.DataCache;
import com.vtb.entity.QqOauth;
import com.vtb.entity.RrOauth;
import com.vtb.entity.SsOauth;
import com.vtb.entity.Var;
import com.vtb.utils.CookieManager;

@SuppressWarnings("serial")
public class LastServlet extends VtbBaseServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        super.doPost(request, response);
        boolean rrIn = false;
        boolean qqIn = false;
        boolean ssIn = false;

        if (lastMap != null) {
            RrOauth rrOauth = (RrOauth) lastMap.get("rr");
            QqOauth qqOauth = (QqOauth) lastMap.get("qq");
            SsOauth ssOauth = (SsOauth) lastMap.get("ss");
            if (rrOauth != null) {
                rrIn = DataCache.rrmap.containsKey(rrOauth.getUni());
            }
            if (qqOauth != null) {
                qqIn = DataCache.qqmap.containsKey(qqOauth.getUni());
            }
            if (ssOauth != null) {
                ssIn = DataCache.ssmap.containsKey(ssOauth.getUni());
            }

            if (rrIn && !rrOauth.isHasUp()) {
                rrOauth = updateRr(rrOauth);
                if (rrOauth == null) {
                    response.sendRedirect("error?err_code=1002");
                    return;
                }
                rrOauth.setHasUp(true);
                lastMap.put("rr", rrOauth);
            }
            if (qqIn && !qqOauth.isHasUp()) {
                qqOauth = updateQq(qqOauth);
                if (qqOauth == null) {
                    response.sendRedirect("error?err_code=1002");
                    return;
                }
                qqOauth.setHasUp(true);
                lastMap.put("qq", qqOauth);
            }
            if (ssIn && !ssOauth.isHasUp()) {
                ssOauth = updateSs(ssOauth);
                if (ssOauth == null) {
                    response.sendRedirect("error?err_code=1002");
                    return;
                }
                ssOauth.setHasUp(true);
                lastMap.put("ss", ssOauth);
            }

            // 当map的长度为2时，说明只授权了两个账号
            if (lastMap.size() == 2) {
                //登陆腾讯和新浪
                if (qqIn && ssIn) {
                    if (!qqOauth.isHasUp() && !ssOauth.isHasUp()) {
                        session.setAttribute("q2s", "open");
                        session.setAttribute("s2q", "open");
                    }else if (qqOauth.isHasUp() && ssOauth.isHasUp()) {
                        if (qqOauth.getRefs().equals(ssOauth.getUni())) {
                            if (qqOauth.getQ2s().equals(Var.OPEN)) {
                                session.setAttribute("q2s", "close");
                            } else {
                                session.setAttribute("q2s", "open");
                            }
                            if (ssOauth.getS2q().equals(Var.OPEN)) {
                                session.setAttribute("s2q", "close");
                            } else {
                                session.setAttribute("s2q", "open");
                            }
                        }else if (qqOauth.getRefr().equals(ssOauth.getRefr())) {
                            session.setAttribute("q2s", "open");
                            session.setAttribute("s2q", "open");
                        }else {
                            //-----------------
                        }
                    }else if (!qqOauth.isHasUp() && ssOauth.isHasUp()) {
                        if (ssOauth.getRefq() == null) {
                            session.setAttribute("q2s", "open");
                            session.setAttribute("s2q", "open");
                        }else {
                            //-----------------
                        }
                    }else if (qqOauth.isHasUp() && !ssOauth.isHasUp()) {
                        if (qqOauth.getRefs() == null) {
                            session.setAttribute("q2s", "open");
                            session.setAttribute("s2q", "open");
                        }else {
                            //-----------------
                        }
                    }
                }
                
                
                //登录新浪和人人
                if (ssIn && rrIn) {
                    if (!ssOauth.isHasUp() && !rrOauth.isHasUp()) {
                        session.setAttribute("r2s", "open");
                        session.setAttribute("s2r", "open");
                    }else if (ssOauth.isHasUp() && rrOauth.isHasUp()) {
                        if (ssOauth.getS2r().equals(rrOauth.getUni())) {
                            if (rrOauth.getR2s().equals(Var.OPEN)) {
                                session.setAttribute("r2s", "close");
                            } else {
                                session.setAttribute("r2s", "open");
                            }
                            if (ssOauth.getS2r().equals(Var.OPEN)) {
                                session.setAttribute("s2r", "close");
                            } else {
                                session.setAttribute("s2r", "open");
                            }
                        }else if (ssOauth.getS2q().equals(rrOauth.getR2q())) {
                            session.setAttribute("r2s", "open");
                            session.setAttribute("s2r", "open");
                        }else {
                            //-------------
                        }
                    }else if (!ssOauth.isHasUp() && rrOauth.isHasUp()) {
                        if (rrOauth.getR2s() == null) {
                            session.setAttribute("r2s", "open");
                            session.setAttribute("s2r", "open");
                        }else {
                            //----------
                        }
                    }else if (ssOauth.isHasUp() && !rrOauth.isHasUp()) {
                        if (ssOauth.getRefr() == null) {
                            session.setAttribute("r2s", "open");
                            session.setAttribute("s2r", "open");
                        }else {
                            //--------------------
                        }
                    }
                } 
                
                //登陆人人和腾讯
                if (rrIn && qqIn) {
                    if (!rrOauth.isHasUp() && !qqOauth.isHasUp()) {
                        session.setAttribute("r2q", "open");
                        session.setAttribute("q2r", "open");
                    }if (rrOauth.isHasUp() && qqOauth.isHasUp()) {
                        if (rrOauth.getR2q().equals(qqOauth.getUni())) {
                            if (rrOauth.getR2q().equals(Var.OPEN)) {
                                session.setAttribute("r2q", "close");
                            } else {
                                session.setAttribute("r2q", "open");
                            }
                            if (qqOauth.getQ2r().equals(Var.OPEN)) {
                                session.setAttribute("q2r", "close");
                            } else {
                                session.setAttribute("q2r", "open");
                            }
                        }else if (rrOauth.getR2s().equals(qqOauth.getQ2s())) {
                            session.setAttribute("r2q", "open");
                            session.setAttribute("q2r", "open");
                        }else {
                            //-----------------------
                        }
                    }else if (!rrOauth.isHasUp() && qqOauth.isHasUp()) {
                        if (qqOauth.getQ2r() == null) {
                            session.setAttribute("r2q", "open");
                            session.setAttribute("q2r", "open");
                        }else {
                            //-----------------------
                        }
                    }else if (rrOauth.isHasUp() && !qqOauth.isHasUp()) {
                        if (rrOauth.getR2q() == null) {
                            session.setAttribute("r2q", "open");
                            session.setAttribute("q2r", "open");
                        }else {
                            //-----------------------
                        }
                    }
                }
            }
            
            if (lastMap.size() == 3) {
                if (ssIn && qqIn && rrIn) {
                    if (rrOauth.getRefq().equals(qqOauth.getUni()) && rrOauth.getRefs().equals(ssOauth.getUni())) {
                        if (rrOauth.getR2q().equals(Var.OPEN)) {
                            session.setAttribute("r2q", "close");
                        }else {
                            session.setAttribute("r2q", "open");
                        }
                        if (rrOauth.getR2s().equals(Var.OPEN)) {
                            session.setAttribute("r2s", "close");
                        }else {
                            session.setAttribute("r2s", "open");
                        }
                        if (qqOauth.getQ2r().equals(Var.OPEN)) {
                            session.setAttribute("q2r", "close");
                        }else {
                            session.setAttribute("q2r", "open");
                        }
                        if (qqOauth.getQ2s().equals(Var.OPEN)) {
                            session.setAttribute("q2s", "close");
                        }else {
                            session.setAttribute("q2s", "open");
                        }
                        if (ssOauth.getS2q().equals(Var.OPEN)) {
                            session.setAttribute("s2q", "close");
                        }else {
                            session.setAttribute("s2q", "close");
                        }
                        if (qqOauth.getQ2s().equals(Var.OPEN)) {
                            session.setAttribute("q2s", "close");
                        }else {
                            session.setAttribute("q2s", "open");
                        }
                    }else {
                        //------------------------
                    }
                } else if (!ssIn && !qqIn && !rrIn) {
                    session.setAttribute("r2q", "open");
                    session.setAttribute("q2r", "open");
                    session.setAttribute("r2s", "open");
                    session.setAttribute("s2r", "open");
                    session.setAttribute("q2s", "open");
                    session.setAttribute("s2q", "open");
                } else if (ssIn && qqIn && !rrIn) {
                    if (ssOauth.getRefq().equals(qqOauth.getUni()) && ssOauth.getRefr() == null && qqOauth.getRefr() == null) {
                        if (qqOauth.getQ2s().equals(Var.OPEN)) {
                            session.setAttribute("q2s", "close");
                        } else {
                            session.setAttribute("q2s", "open");
                        }
                        if (ssOauth.getS2q().equals(Var.OPEN)) {
                            session.setAttribute("s2q", "close");
                        } else {
                            session.setAttribute("s2q", "open");
                        }
                        session.setAttribute("r2q", "open");
                        session.setAttribute("q2r", "open");
                        session.setAttribute("r2s", "open");
                        session.setAttribute("s2r", "open");
                    } else {
                        session.setAttribute("status", "bound"); 
                    }
                } else if (ssIn && !qqIn && rrIn) {
                    if (ssOauth.getRefr().equals(rrOauth.getUni()) && ssOauth.getRefq() == null && rrOauth.getRefq() == null) {
                        if (rrOauth.getR2s().equals(Var.OPEN)) {
                            session.setAttribute("r2s", "close");
                        } else {
                            session.setAttribute("r2s", "open");
                        }
                        if (ssOauth.getS2r().equals(Var.OPEN)) {
                            session.setAttribute("s2r", "close");
                        } else {
                            session.setAttribute("s2r", "open");
                        }
                        session.setAttribute("q2s", "open");
                        session.setAttribute("s2q", "open");
                        session.setAttribute("r2q", "open");
                        session.setAttribute("q2r", "open");
                    } else {
                        session.setAttribute("status", "bound"); 
                    }
                } else if (!ssIn && qqIn && rrIn) {
                    if (qqOauth.getRefr().equals(rrOauth.getUni()) && qqOauth.getRefs() == null && rrOauth.getRefs() == null) {
                        if (rrOauth.getR2q().equals(Var.OPEN)) {
                            session.setAttribute("r2q", "close");
                        } else {
                            session.setAttribute("r2q", "open");
                        }
                        if (qqOauth.getQ2r().equals(Var.OPEN)) {
                            session.setAttribute("q2r", "close");
                        } else {
                            session.setAttribute("q2r", "open");
                        }
                        session.setAttribute("q2s", "open");
                        session.setAttribute("s2q", "open");
                        session.setAttribute("r2s", "open");
                        session.setAttribute("s2r", "open");
                    }else {
                        session.setAttribute("status", "bound"); 
                    }
                }
            }
            session.setAttribute("lastMap", lastMap);
        }
        CookieManager.getInstance().clearCookie(response, "xnsid", 0, "/", ".renren.com");
        response.sendRedirect("");
    }
}
